package net.qiqbframework.commandhandling;


import net.qiqbframework.messaging.annotation.MessageHandler;

import java.lang.annotation.*;

/**
 * 标记此注解，表明是一个命令处理器。一般作用在聚合根对象方法上，如果标记在聚合根。
 * 标记的方法的第一个参数是命令对象。
 * 被标记的方法将被转化为 {@link AnnotationCommandHandlerAdapter}。
 */

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.ANNOTATION_TYPE})
@MessageHandler(messageType = CommandMessage.class)
public @interface CommandHandler {

    /**
     * 此命令处理器执行指定的名称。默认为有效负载类型的完全限定类名（即第一个参数）。
     *
     * @return 命令名称
     */
    String commandName() default "";

    /**
     * 匹配待处理的消息负载类型
     *
     * @return 此处理的消息负载类型
     */
    Class<?> payloadType() default Object.class;
}
